package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;

/**
 * @author By ZengPeng
 */
public class 力扣_680_验证回文字符串Ⅱ {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_680_验证回文字符串Ⅱ().validPalindrome("abc"));
    }

    /**
    题目：给定一个非空字符串 s，最多删除一个字符。判断是否能成为回文字符串。

      

     示例 1:

     输入: s = "aba"
     输出: true
     示例 2:

     输入: s = "abca"
     输出: true
     解释: 你可以删除c字符。
     示例 3:

     输入: s = "abc"
     输出: false

    分析：【P 💜💜】
       1.左右指针：如果本身是回文串，那么直接通过
                   如果左右指针对比，发现不等，则移除left || right 一个后，看看剩下是是否是回文串
                --6 ms, 在所有 Java 提交中击败了55.60%的用户

    边界值 & 注意点：
       1.
     **/
    public boolean validPalindrome(String s) {
        char[] chars = s.toCharArray();
        int left=0,right = chars.length-1;
        while (left<right){
            if(chars[left]!=chars[right])
               return isPalindromeString(chars,left+1,right) || isPalindromeString(chars,left,right-1);
            left++;
            right--;
        }
        return true;
    }

    private boolean isPalindromeString(char[]  chars, int left, int right) {
        while (left<right){
            if(chars[left++]!=chars[right--])return false;
        }
        return true;
    }
}
